package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.anno.Log;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/*
  员工业务实现类
     要交给spring管理
 */
@Service
public class EmpServiceImpl implements EmpService {

    // 从spring中找到 干活的mapper
    @Autowired
    private EmpMapper empMapper;

//    /**
//     *  条件分页查询
//     * @param page    页码
//     * @param pageSize 每页展示记录数
//     * @return
//     */
//    @Override
//    public PageBean page(Integer page, Integer pageSize) {
//        // 1 获取总记录数--mapper
//        Long total  = empMapper.count();//计数查询  select count(*) from emp
//        //2: 获取当前页查询的数据列表  ---mapper
//        //算出 起始索引
//        Integer start = (page-1)*pageSize;
//        List<Emp> rows = empMapper.list(start,pageSize);//select * from emp limit 起始索引,每页显示条数
//        //3: 将上述两个数据 封装到 PageBean对象中
//        PageBean pb = new PageBean(total,rows);
//        return pb;
//    }

    /**
     *  条件分页查询
     * @param page    页码
     * @param pageSize 每页展示记录数
     * @param name
     * @param gender
     * @param begin
     * @param end
     * @return
     */
    @Override
    public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
       // 分页的事情 分页插件来干
       // 分页插件进行插手处理分页的事
       // 1:开启分页操作
       PageHelper.startPage(page,pageSize);
       //2:执行你的功能---插件会插手把你的一个sql转换成两个sql
        List<Emp> empList = empMapper.list(name,gender,begin,end);
        // 神奇之处--插件List底层产生的对象 Page<Emp>对象
        //   处理俩sql 统计总条数  统计当前页数据 都会封装到Page对象中
        // 想取出来 总条数 当前页也数据 在 List形态下不行
        // 故而要向下转型
        Page<Emp> p = (Page<Emp>)empList;

                                //从p中把对应数据取出来。
        PageBean pb = new PageBean(p.getTotal(),p.getResult());
        return pb;
    }

    /**
     * 批量删除
     * @param ids
     */
    @Override
    @Log
    public void delete(List<Integer> ids) {
        //mapper删除
        empMapper.delete(ids);
    }

    /**
     * 新增员工信息
     * @param emp
     */
    @Override
    @Log
    public void add(Emp emp) {
        //补充 基础字段
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        //交给mapper
        empMapper.insert(emp);
    }

    @Override
    public Emp getById(Integer id) {
        //找mapper完成
        Emp emp = empMapper.findById(id);

        return emp;
    }

    /**
     * 更新 emp信息
     *    根据id来更新 emp信息
     * @param emp
     */
    @Override
    @Log
    public void update(Emp emp) {
        //1:补充基础字段 更新时间
        emp.setUpdateTime(LocalDateTime.now());
        //2:呼叫mapper 完成数据库中的修改
        empMapper.update(emp);

    }
    /*
      完成登录
     */
    @Override
    public Emp login(Emp emp) {
        // emp里面封装的  password  username 传递给mapper根据条件查询

        Emp  loginEmp = empMapper.getUserByUsernameAndPassword(emp);//返回查到用户

        return loginEmp;
    }
}
